package cn.e3mall.content.service.impl;

import cn.e3mall.common.pojo.EasyUITreeNode;
import cn.e3mall.common.utils.E3Result;
import cn.e3mall.content.service.ContentCategoryService;
import cn.e3mall.mapper.TbContentCategoryMapper;
import cn.e3mall.pojo.TbContentCategory;
import cn.e3mall.pojo.TbContentCategoryExample;
import cn.e3mall.pojo.TbContentCategoryExample.Criteria;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author JiangBin
 * @version 1.0.0 @
 * @description
 * @date 2018年3月1日 下午8:33:46
 */
@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {

    @Autowired
    private TbContentCategoryMapper contentCategoryMapper;

    @Override
    public List<EasyUITreeNode> getContentCategoryList(long parentId) {
        // 1.根据parentId来查询tb_content_category子节点列表
        TbContentCategoryExample example = new TbContentCategoryExample();
        // 设置查询条件
        Criteria criteria = example.createCriteria();
        criteria.andParentIdEqualTo(parentId);
        // 2.获取查询结果
        List<TbContentCategory> list = contentCategoryMapper.selectByExample(example);
        // 3.将查询结果转换成List<EastUITreeNode>
        ArrayList<EasyUITreeNode> resultList = new ArrayList<>();
        // 4.返回结果
        for (TbContentCategory tbContentCategory : list) {
            EasyUITreeNode node = new EasyUITreeNode();
            node.setId(tbContentCategory.getId());
            node.setText(tbContentCategory.getName());
            node.setState(tbContentCategory.getIsParent() ? "closed" : "open");
            // 添加到列表
            resultList.add(node);
        }
        return resultList;
    }

    @Override
    public E3Result addContentCategory(long parentId, String name) {
        // 1.创建TbContentCategroy对象并补全属性
        TbContentCategory tbContentCategory = new TbContentCategory();
        // 设置父节点ID和节点名字
        tbContentCategory.setParentId(parentId);
        tbContentCategory.setName(name);
        // 新增的节点一定是子节点，不是父节点
        tbContentCategory.setIsParent(false);
        tbContentCategory.setSortOrder(1);
        // 设置节点的状态（1正常，2删除）
        tbContentCategory.setStatus(1);
        tbContentCategory.setCreated(new Date());
        tbContentCategory.setUpdated(new Date());

        // 2.向tb_conten_categroy表中插入数据
        contentCategoryMapper.insert(tbContentCategory);
        // 根据parentId来查询节点信息
        TbContentCategory parentNode = contentCategoryMapper.selectByPrimaryKey(parentId);
        // 判断并修改新增节点的父节点的IsParent状态
        if (!parentNode.getIsParent()) {
            parentNode.setIsParent(true);
            contentCategoryMapper.updateByPrimaryKey(parentNode);
        }
        // 3.返回结果
        return E3Result.ok(tbContentCategory);
    }

    @Override
    public E3Result deleteContentCategory(long id) {
        // 1.根据当前的节点ID来查询节点信息
        TbContentCategory contentCategory = contentCategoryMapper.selectByPrimaryKey(id);
        // 2.获取当前结点的父节点ID
        Long parentId = contentCategory.getParentId();
        // 3.根据父节点来获取下面的子节点个数
        TbContentCategoryExample example = new TbContentCategoryExample();
        Criteria criteria = example.createCriteria();
        criteria.andParentIdEqualTo(parentId);
        int count = contentCategoryMapper.countByExample(example);
        // 4.判断并修改当前节点的状态，父节点下面的子节点只有一个就修改父节点的isParent的状态
        // 设置节点的状态（1正常，2删除）
        contentCategory.setStatus(2);
        contentCategory.setUpdated(new Date());
        contentCategoryMapper.updateByPrimaryKey(contentCategory);
        // 判断父节点下子节点的个数
        if (count == 1) {
            TbContentCategory parentNode = contentCategoryMapper.selectByPrimaryKey(parentId);
            parentNode.setIsParent(false);
            contentCategoryMapper.updateByPrimaryKey(parentNode);
        }
        return E3Result.ok();
    }

    @Override
    public E3Result updateContentCategory(long id, String name) {
        //1.根据ID来查询节点信息
        TbContentCategory contentCategory = contentCategoryMapper.selectByPrimaryKey(id);
        //2.重新设置要修该的信息
        contentCategory.setName(name);
        contentCategory.setUpdated(new Date());
        //3.修该节点信息
        contentCategoryMapper.updateByPrimaryKey(contentCategory);
        return E3Result.ok();
    }

}
